#ifndef			LOLCODE_H_
# define       		LOLCODE_H_

#include <iostream>
#include <map>

#include "FileCPP.h"
#include "StaticBNF.h"
#include "StaticNextBNF.h"
#include "FileLOLCode.h"

class NodeAST;

class			LOLCode
{
 private:
  IBNF*			_bnf;
  FileCPP*		_fileCPP;
  FileLOLCode*		_fileLOL;
  NodeAST*		_node;
  std::map<std::string, std::string> _var;

 private:
  LOLCode(LOLCode const &){}
  LOLCode&		operator = (LOLCode const &){return *this;}

 public:
  virtual ~LOLCode(){}
  LOLCode();
  void			createAST(std::string const & file, bool n);
  void			parseVariable(std::string const & file);
  void			parseVariableAdd(std::string add);
  void			parseVariableAsign(std::string file);
  void			astToFile(std::string const & file);
  FileLOLCode&		getFileLOL() const;
  FileCPP&		getFileCPP() const;
  IBNF&			getBnf() const;
};

#endif			//!LOLCODE_H_
